home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 May
/
EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso
/
listati
/
labirinto.c
Wrap
C/C++ Source or Header
|
1984-10-30
|
2KB
|
123 lines
/* Labirinto.c */
/* Programma per l'analisi del percorso in un labirinto */
#include <stdio.h>
#define MAXLABX 20
#define MAXLABY 15
int Lab[MAXLABX][MAXLABY];
void InitLab(void);
void CopiaLab(int LabS[MAXLABX][MAXLABY], int LabD[MAXLABX][MAXLABY]);
void Passo(int x, int y);
void Percorri(int x, int y);
void DisegnaLab(int L[MAXLABX][MAXLABY]);
char *Labirinto[] =
{
"11111111111111111101",
"10000000000010000001",
"11111111101010111111",
"10100000101010100101",
"10101110101010110101",
"10101010101010100101",
"10100010101010110101",
"10111110101000000101",
"10000000001111110101",
"11101111110000000101",
"10001010110111110101",
"10100000010000010101",
"10111111111111111101",
"10000000000000000001",
"11111111111111111111",
};
int xs = 1, ys = 13;
void InitLab()
{
char *l;
int x, y;
for (y=0; y<MAXLABY; y++)
{
l = Labirinto[y];
for (x=0; x<MAXLABX; x++)
Lab[x][y] = l[x]-'0';
}
return;
}
void CopiaLab(int LabS[MAXLABX][MAXLABY], int LabD[MAXLABX][MAXLABY])
{
int x, y;
for (y=0; y<MAXLABY; y++)
for (x=0; x<MAXLABX; x++)
LabD[x][y] = LabS[x][y];
return;
}
int LabM[MAXLABX][MAXLABY];
int LunC, LunM;
void Passo(int x, int y)
{
Lab[x][y] = 2; LunC++;
if (x == 0 || x == MAXLABX-1 || y == 0 || y == MAXLABY-1)
{
if (LunC < LunM)
{
CopiaLab(Lab,LabM);
LunM = LunC;
}
}
else
{
if (Lab[x+1][y] == 0) Passo(x+1,y);
if (Lab[x][y+1] == 0) Passo(x,y+1);
if (Lab[x-1][y] == 0) Passo(x-1,y);
if (Lab[x][y-1] == 0) Passo(x,y-1);
}
Lab[x][y] = 0; LunC--;
return;
}
void Percorri(int x, int y)
{
LunC = 0;
CopiaLab(Lab, LabM);
LunM = MAXLABX*MAXLABY+1;
Passo(x,y);
}
void DisegnaLab(int L[MAXLABX][MAXLABY])
{
int x, y;
for (y=0; y<MAXLABY; y++)
{
for (x=0; x<MAXLABX; x++)
{
if (L[x][y] == 1) printf("#");
else if (L[x][y] == 2) printf("+");
else printf(" ");
}
printf("\n");
}
}
int main()
{
InitLab();
printf("Questo è il labirinto:\n");
DisegnaLab(Lab);
Percorri(xs,ys);
printf("\nEcco il percorso minimo dal punto di partenza (%d,%d) all'uscita:\n",xs,ys);
DisegnaLab(LabM);
printf("Lunghezza del percorso: %d\n",LunM);
}